﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Clear.Algorithms
{
    public class StringAlgorithms
    {
        /// <summary>
        /// 无重复字符的最长子串 中等
        /// 给定一个字符串 s ，请你找出其中不含有重复字符的最长子串的长度。
        /// 示例 1:
        /// 输入: s = "abcabcbb"
        /// 输出: 3 
        /// 解释: 因为无重复字符的最长子串是 "abc"，所以其长度为 3。
        /// 示例 2:
        /// 输入: s = "bbbbb"
        /// 输出: 1
        /// 解释: 因为无重复字符的最长子串是 "b"，所以其长度为 1。
        /// 示例 3:
        /// 输入: s = "pwwkew"
        /// 输出: 3
        /// 解释: 因为无重复字符的最长子串是 "wke"，所以其长度为 3。
        ///      请注意，你的答案必须是 子串 的长度，"pwke" 是一个子序列，不是子串。
        /// 提示：
        /// 0 <= s.length <= 5 * 104
        /// s 由英文字母、数字、符号和空格组成
        /// </summary>
        /// <param name="s"></param>
        /// <returns></returns>
        public int LengthOfLongestSubstring(string s)
        {
            List<int> l = new List<int>();
            List<char> list = new List<char>();
            foreach (char c in s)
            {
                if (list.Contains(c))
                {
                    l.Add(list.Count);
                    list.Clear();
                    list.Add(c);
                }
                else
                    list.Add(c);
            }
            return l.Max();
        }
        /// <summary>
        /// 检查平衡字符串 简单
        /// 给你一个仅由数字 0 - 9 组成的字符串 num。如果偶数下标处的数字之和等于奇数下标处的数字之和，则认为该数字字符串是一个 平衡字符串。
        /// 如果 num 是一个 平衡字符串，则返回 true；否则，返回 false。
        /// 示例 1：
        /// 输入：num = "1234"
        /// 输出：false
        /// 解释：
        /// 偶数下标处的数字之和为 1 + 3 = 4，奇数下标处的数字之和为 2 + 4 = 6。
        /// 由于 4 不等于 6，num 不是平衡字符串。
        /// 示例 2：
        /// 输入：num = "24123"
        /// 输出：true
        /// 解释：
        /// 偶数下标处的数字之和为 2 + 1 + 3 = 6，奇数下标处的数字之和为 4 + 2 = 6。
        /// 由于两者相等，num 是平衡字符串。
        /// 提示：
        /// 2 <= num.length <= 100
        /// num 仅由数字 0 - 9 组成。
        /// </summary>
        /// <param name="num"></param>
        /// <returns></returns>
        public bool IsBalanced(string num)
        {
            int x = 0;
            int y = 0;
            var list = num.ToArray();
            for (int i = 1; i < list.Length + 1; i++)
            {
                if (i % 2 == 0)
                {
                    x += int.Parse(list[i - 1].ToString());
                }
                else
                {
                    y += int.Parse(list[i - 1].ToString());
                }
            }
            return x == y;
        }

    }
}
